{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "# @Author : FengLiang\n",
    "# @Time : 2020/4/11 14:04\n",
    "# @File : SlopeOne.py\n",
    "\"\"\"\n",
    "\n",
    "from operator import itemgetter\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# data_file = 'ratings.csv'\n",
    "data_file = 'text3.csv'\n",
    "\n",
    "\n",
    "class SlopeOneCF:\n",
    "    def __init__(self):\n",
    "        self.data = pd.read_csv(data_file, usecols=range(3))\n",
    "        self.data.columns = ['user', 'item', 'rating']\n",
    "        self.train = {}\n",
    "        self.test = {}\n",
    "        self.frequencies = {}\n",
    "        self.deviations = {}\n",
    "\n",
    "    @staticmethod\n",
    "    def _process_data(input_data):\n",
    "        \"\"\"\n",
    "        自定义数据处理函数\n",
    "        :param input_data: DataFrame\n",
    "        :return: dict{user_id: {item_id: rating}}\n",
    "        \"\"\"\n",
    "        output_data = {}\n",
    "        for _, items in input_data.iterrows():\n",
    "            user = int(items['user'])\n",
    "            item = int(items['item'])\n",
    "            rating = float(items['rating'])\n",
    "            if user in output_data.keys():\n",
    "                currentRatings = output_data[user]\n",
    "            else:\n",
    "                currentRatings = {}\n",
    "            currentRatings[item] = rating\n",
    "            output_data[user] = currentRatings\n",
    "        return output_data\n",
    "\n",
    "    def load_data(self, train_size, normalize):\n",
    "        \"\"\"\n",
    "        划分训练集、测试集，并定义数据结构为：dict{user_id: {item_id: rating}}\n",
    "        :param train_size:\n",
    "        :param normalize:\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        print('loading data')\n",
    "        if normalize:\n",
    "            # 利用pandas对整列进行归一化，评分在(0,1)之间\n",
    "            rating = self.data['rating']\n",
    "            self.data['rating'] = (rating - rating.min()) / (rating.max() - rating.min())\n",
    "\n",
    "        train_data = self.data.sample(frac=train_size, random_state=10, axis=0)\n",
    "        test_data = self.data[~self.data.index.isin(train_data.index)]\n",
    "\n",
    "        self.train = self._process_data(train_data)\n",
    "        self.test = self._process_data(test_data)\n",
    "\n",
    "        print('loaded data finish')\n",
    "\n",
    "    def compute_deviations(self):\n",
    "        \"\"\"\n",
    "        计算物品和物品之间的评分偏差\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        print('computing all deviations')\n",
    "        for ratings in self.train.values():\n",
    "            for (item, rating) in ratings.items():\n",
    "                self.frequencies.setdefault(item, {})\n",
    "                self.deviations.setdefault(item, {})\n",
    "                for (item2, rating2) in ratings.items():\n",
    "                    if item != item2:\n",
    "                        self.frequencies[item].setdefault(item2, 0)\n",
    "                        self.deviations[item].setdefault(item2, 0.0)\n",
    "                        self.frequencies[item][item2] += 1  # 物品出现的次数\n",
    "                        self.deviations[item][item2] += rating - rating2  # 物品评分差\n",
    "\n",
    "        for (item, ratings) in self.deviations.items():\n",
    "            for item2 in ratings:\n",
    "                ratings[item2] /= self.frequencies[item][item2]  # 计算物品评分差的均值\n",
    "        print('computed all deviations finish')\n",
    "\n",
    "    def predict(self, userRatings):\n",
    "        \"\"\"\n",
    "        对用户进行推荐结果\n",
    "        :param userRatings:\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        recommendations = {}  # 存储推荐结果\n",
    "        frequencies = {}  # 物品被不同用户访问的记录\n",
    "        for (userItem, userRating) in userRatings.items():\n",
    "            for (diffItem, diffRatings) in self.deviations.items():\n",
    "                if diffItem not in userRatings and \\\n",
    "                        userItem in self.deviations[diffItem]:\n",
    "                    freq = self.frequencies[diffItem][userItem]\n",
    "                    recommendations.setdefault(diffItem, 0.0)\n",
    "                    frequencies.setdefault(diffItem, 0)\n",
    "                    recommendations[diffItem] += (diffRatings[userItem] + userRating) * freq\n",
    "                    frequencies[diffItem] += freq\n",
    "        for (k, v) in recommendations.items():\n",
    "            recommendations[k] = v / frequencies[k]\n",
    "        return recommendations\n",
    "\n",
    "    def validate(self):\n",
    "        \"\"\"\n",
    "        计算MAE、RMSE评估指标\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        print('calculating MAE and RMSE')\n",
    "        error_sum = 0.0\n",
    "        sqrError_sum = 0.0\n",
    "        setSum = 0\n",
    "        count = 0\n",
    "        # i = 0\n",
    "        for user in self.test:\n",
    "            # i += 1\n",
    "            # if i % 100 == 0:\n",
    "            #     print('calculating %d users' % i)\n",
    "            recommendation = self.predict(self.train[user]).copy()\n",
    "            count += len(recommendation.items())\n",
    "            userRatings = self.test[user]\n",
    "            for item in recommendation:\n",
    "                if item in userRatings:\n",
    "                    error_sum += abs(userRatings[item] - recommendation[item])\n",
    "                    sqrError_sum += (userRatings[item] - recommendation[item]) ** 2\n",
    "                    setSum += 1\n",
    "        mae = error_sum / setSum\n",
    "        rmse = np.sqrt(sqrError_sum / setSum)\n",
    "        return mae, rmse\n",
    "\n",
    "    def evaluate(self):\n",
    "        \"\"\"\n",
    "        根据测试集中所有用户进行推荐topN结果，并计算precision和recall\n",
    "        :param N:\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        print('calculating top N result')\n",
    "        hit = 0\n",
    "        recall_sum = 0\n",
    "        precision_sum = 0\n",
    "        # i = 0\n",
    "        for user in self.test:\n",
    "            # i += 1\n",
    "            # if i % 100 == 0:\n",
    "            #     print('calculating %d users' % i)\n",
    "            real_items = self.test.get(user)  # 真实的items\n",
    "            recommendation = self.predict(self.train[user]).copy()\n",
    "            item_list = [(item, rating) for item, rating in recommendation.items()]\n",
    "            item_list.sort(key=lambda x: x[1], reverse=True)\n",
    "            pred_items = [i[0] for i in item_list]\n",
    "\n",
    "            hit += len([i for i in pred_items if i in real_items])  # 预测正确的items\n",
    "\n",
    "            precision_sum += len(pred_items)\n",
    "            recall_sum += len(real_items)\n",
    "\n",
    "        precision = hit / (precision_sum * 1.0)\n",
    "        recall = hit / (recall_sum * 1.0)\n",
    "\n",
    "        return precision, recall\n",
    "\n",
    "    def get_top_n(self, user, top_n=10):\n",
    "        \"\"\"\n",
    "        输入user_id，预测返回topN的结果\n",
    "        :param user:\n",
    "        :param top_n:\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        recommendation = self.predict(self.train[user]).copy()\n",
    "        item_list = [(item, rating) for item, rating in recommendation.items()]\n",
    "        item_list.sort(key=lambda x: x[1], reverse=True)\n",
    "        top_list = item_list[:top_n]  # 预测的items\n",
    "        return top_list\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据集： 0.9\n",
      "loading data\n",
      "loaded data finish\n",
      "computing all deviations\n",
      "computed all deviations finish\n",
      "calculating MAE and RMSE\n",
      "MAE: 0.15170906383048102 RMSE: 0.19599239770269353\n",
      "calculating top N result\n",
      "precision: 0.003765886733615764 recall: 0.9734835929731521\n",
      "数据集： 0.8\n",
      "loading data\n",
      "loaded data finish\n",
      "computing all deviations\n",
      "computed all deviations finish\n",
      "calculating MAE and RMSE\n",
      "MAE: 0.14062457702259265 RMSE: 0.18493219922208703\n",
      "calculating top N result\n",
      "precision: 0.007254749959777092 recall: 0.9865738438587768\n",
      "数据集： 0.7\n",
      "loading data\n",
      "loaded data finish\n",
      "computing all deviations\n",
      "computed all deviations finish\n",
      "calculating MAE and RMSE\n",
      "MAE: 0.14474085647002072 RMSE: 0.18889371098580413\n",
      "calculating top N result\n",
      "precision: 0.01087467869440807 recall: 0.991049723756906\n",
      "数据集： 0.6\n",
      "loading data\n",
      "loaded data finish\n",
      "computing all deviations\n",
      "computed all deviations finish\n",
      "calculating MAE and RMSE\n",
      "MAE: 0.15044307031060758 RMSE: 0.1960618025815403\n",
      "calculating top N result\n",
      "precision: 0.014469762000485343 recall: 0.9932869219293884\n",
      "数据集： 0.5\n",
      "loading data\n",
      "loaded data finish\n",
      "computing all deviations\n",
      "computed all deviations finish\n",
      "calculating MAE and RMSE\n",
      "MAE: 0.15473470331338912 RMSE: 0.20128243928843925\n",
      "calculating top N result\n",
      "precision: 0.01811818243301997 recall: 0.9946297155738248\n"
     ]
    }
   ],
   "source": [
    "slope_one = SlopeOneCF()\n",
    "train_range = [0.9, 0.8, 0.7, 0.6, 0.5]\n",
    "mae_rmse = []\n",
    "pre_rec = []\n",
    "for i in train_range:\n",
    "    print('数据集：', i)\n",
    "    slope_one.load_data(train_size=i, normalize=True)\n",
    "    slope_one.compute_deviations()\n",
    "    mae, rmse = slope_one.validate()\n",
    "    print('MAE:', mae, 'RMSE:', rmse)\n",
    "    mae_rmse.append((mae, rmse))\n",
    "    \n",
    "    pre, rec = slope_one.evaluate()\n",
    "    print('precision:', pre, 'recall:', rec)\n",
    "    pre_rec.append((pre, rec))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = train_range\n",
    "mae = [i[0] for i in mae_rmse]\n",
    "rmse = [i[1] for i in mae_rmse]\n",
    "pre = [i[0] for i in pre_rec]\n",
    "rec = [i[1] for i in pre_rec]\n",
    "\n",
    "plt.plot(x, mae)\n",
    "plt.xlabel('train data')\n",
    "plt.ylabel('MAE')\n",
    "plt.show()\n",
    "\n",
    "plt.plot(x, rmse)\n",
    "plt.xlabel('train data')\n",
    "plt.ylabel('RMSE')\n",
    "plt.show()\n",
    "\n",
    "plt.plot(x, pre)\n",
    "plt.xlabel('train data')\n",
    "plt.ylabel('precision')\n",
    "plt.show()\n",
    "\n",
    "plt.plot(x, rec)\n",
    "plt.xlabel('train data')\n",
    "plt.ylabel('recall')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>训练集大小</th>\n",
       "      <th>MAE</th>\n",
       "      <th>RMSE</th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>90%</td>\n",
       "      <td>0.151709</td>\n",
       "      <td>0.195992</td>\n",
       "      <td>0.003766</td>\n",
       "      <td>0.973484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>80%</td>\n",
       "      <td>0.140625</td>\n",
       "      <td>0.184932</td>\n",
       "      <td>0.007255</td>\n",
       "      <td>0.986574</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>70%</td>\n",
       "      <td>0.144741</td>\n",
       "      <td>0.188894</td>\n",
       "      <td>0.010875</td>\n",
       "      <td>0.991050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60%</td>\n",
       "      <td>0.150443</td>\n",
       "      <td>0.196062</td>\n",
       "      <td>0.014470</td>\n",
       "      <td>0.993287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>50%</td>\n",
       "      <td>0.154735</td>\n",
       "      <td>0.201282</td>\n",
       "      <td>0.018118</td>\n",
       "      <td>0.994630</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  训练集大小       MAE      RMSE  precision    recall\n",
       "0   90%  0.151709  0.195992   0.003766  0.973484\n",
       "1   80%  0.140625  0.184932   0.007255  0.986574\n",
       "2   70%  0.144741  0.188894   0.010875  0.991050\n",
       "3   60%  0.150443  0.196062   0.014470  0.993287\n",
       "4   50%  0.154735  0.201282   0.018118  0.994630"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = {\n",
    "    '训练集大小': [format(x, '.0%') for x in train_range], \n",
    "    'MAE': [i[0] for i in mae_rmse], \n",
    "    'RMSE': [i[1] for i in mae_rmse], \n",
    "    'precision': [i[0] for i in pre_rec], \n",
    "    'recall': [i[1] for i in pre_rec]\n",
    "}\n",
    "\n",
    "pd.DataFrame(data=d)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 取所有数据进行topN推荐结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading data\n",
      "loaded data finish\n",
      "computing all deviations\n",
      "computed all deviations finish\n",
      "[(3315, 1.5163398692810457), (4957, 1.3333333333333335), (3606, 1.2941176470588234), (3599, 1.2941176470588234), (2314, 1.2936507936507935), (4055, 1.2936507936507935), (3404, 1.2478017585931265), (2239, 1.206018518518519), (2511, 1.2058479532163744), (3086, 1.20450885668277)]\n"
     ]
    }
   ],
   "source": [
    "slope_one = SlopeOneCF()\n",
    "slope_one.load_data(train_size=1, normalize=True)\n",
    "slope_one.compute_deviations()\n",
    "res = slope_one.get_top_n(user=1, top_n=10)\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3315</td>\n",
       "      <td>1.516340</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4957</td>\n",
       "      <td>1.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3606</td>\n",
       "      <td>1.294118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3599</td>\n",
       "      <td>1.294118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2314</td>\n",
       "      <td>1.293651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>4055</td>\n",
       "      <td>1.293651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>3404</td>\n",
       "      <td>1.247802</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2239</td>\n",
       "      <td>1.206019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2511</td>\n",
       "      <td>1.205848</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>3086</td>\n",
       "      <td>1.204509</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   item_id    rating\n",
       "0     3315  1.516340\n",
       "1     4957  1.333333\n",
       "2     3606  1.294118\n",
       "3     3599  1.294118\n",
       "4     2314  1.293651\n",
       "5     4055  1.293651\n",
       "6     3404  1.247802\n",
       "7     2239  1.206019\n",
       "8     2511  1.205848\n",
       "9     3086  1.204509"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(res, columns=['item_id', 'rating'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
